#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

bool only_digits(string s);
char rotate(char c, int n);

int main(int argc, string argv[])
{
    if (argc != 2)
    {
        printf("Usage: ./caesar key\n");
        return 1;
    }

    string key = argv[1];

    // 如果命令行参数不是数字的话，就提醒用户应该输入正确的数字
    if (only_digits(key) == false)
    {
        printf("Usage: ./caesar key\n");
        return 1;
    }

    // 将输入的命令行参数从字符串转换成整数
    int k = atoi(key);

    // 获取用户输入的原文
    string plaintext = get_string("plantext: ");

    // 对每一个原文中的字符计算
    for (int i = 0; plaintext[i] != '\0'; i++)
    {

        plaintext[i] = rotate(plaintext[i], k);
    }

    printf("ciphertext: %s\n", plaintext);
}

bool only_digits(string s)
{
    bool only_digits = false;

    for (int i = 0; s[i] != '\0'; i++)
    {
        if (isdigit(s[i]))
        {
            only_digits = true;
        }
    }

    return only_digits;
}

char rotate(char c, int n)
{
    if (c >= 'a' && c <= 'z')
    {
        return 'a' + (c - 'a' + n) % 26;
    }
    else if (c >= 'A' && c <= 'Z')
    {
        return 'A' + (c - 'A' + n) % 26;
    }
    else
    {
        return c;
    }
}
